; 0柱面0磁道1扇区
[ORG  0x7c00]

[SECTION .text]
[BITS 16]
global _start
_start:
    ; 设置屏幕模式为文本模式，清除屏幕
    mov ax, 3
    int 0x10

    ; bochs的断点
    xchg bx, bx

    push 20             ; b
    push 10             ; a
    call show
    add sp, 4           ; 外平栈

    xchg bx, bx

    mov si, hello
    call print

    jmp     $

show:
    push bp
    mov bp, sp

    ; 这两行代码之间,所有的寄存器可以随便用
    ;pushad
    push si

    ; 怎么取到传入的参数
    mov bx, [bp + 2 * 3]        ; 第二个参数
    mov ax, [bp + 2 * 2]        ; 第一个参数

    cmp ax, bx
    jg .greather
    mov eax, 20
    jmp .return

.greather:
    mov eax, 10

.return:
    pop si
    ;popad

    ; 这两句代码等同于leave
    ;mov esp, ebp
    ;pop ebp

    leave
    ret

; 如何调用
; mov     si, msg   ; 1 传入字符串
; call    print     ; 2 调用
print:
    mov ah, 0x0e
    mov bh, 0
    mov bl, 0x01
.loop:
    mov al, [si]
    cmp al, 0
    jz .done
    int 0x10

    inc si
    jmp .loop
.done:
    ret

hello:
    db "hello, i am ziya...", 10, 13, 0


times 510 - ($ - $$) db 0
db 0x55, 0xaa